#define _CRT_SECURE_NO_WARNINGS 1 
#include"_unordered_map.hpp"
#include"_unordered_set.hpp"

void testmap() {
	//unordered_map<int, int> map;

	//map.insert({ 4,1 });
	//map.insert({ 1,1 });
	//map.insert({ 2,1 });
	//map.insert({ 3,1 });
	//map.insert({ 5,1 });
	//map.insert({ 6,1 });


	//map.insert({ 9,1 });
	//map.insert({ 7,1 });
	//map.insert({ 8,1 });

	//for (auto e : map) {
	//	cout << e.first << ":" << e.second << endl;
	//}

	/*unordered_map<int, int>::iterator it = map.begin();*/

	unordered_map<string, string> map;

	map.insert({ "left","1" });
	map.insert({ "right","2" });
	map.insert({ "max","3" });
	map.insert({ "min","4" });
	map.insert({ "begin","5" });
	map.insert({ "end","6" });
	map.insert({ "insert","7" });
	map.insert({ "erase","8" });
	map.insert({ "find","9" });

	for (auto e : map) {
		cout << e.first << ":" << e.second << endl;
	}

	unordered_map<string, string>::iterator it = map.begin();

	while (it != map.end()) {
		cout << it->first << ":" << it->second << endl;
		++it;
	}

	cout << endl;

	pair<unordered_map<string, string>::iterator, bool> p = map.insert({ "iterator","X" });
	
	cout << p.first->first << ":" << p.first->second << ":" << p.second << endl;
	p = map.insert({ "iterator","X" });
	cout << p.first->first << ":" << p.first->second << ":" << p.second << endl;

}

void testset() {
	unordered_set<int> set;

	set.insert(2);
	set.insert(4);
	set.insert(1);
	set.insert(5);
	set.insert(3);
	set.insert(15);
	set.insert(25);

	set.insert(6);
	set.insert(7);
	set.insert(8);
	set.insert(9);
	set.insert(10);
	set.insert(11);
	set.insert(35);

	for (auto e : set) {
		cout << e << endl;
	}

	cout << endl;
	unordered_set<int>::iterator it = set.begin();
	while (it != set.end()) {
		cout << *it << endl;
		++it;
	}

	cout << endl;

	cout << *(set.insert(11).first) << endl;
	cout << (set.insert(11).second) << endl;

	cout << endl;

	cout << *(set.insert(100).first) << endl;
	cout << set.erase(100) << endl;
	cout << (set.insert(100).second) << endl;

}

int main() {
	testmap();
	//testset();
	return 0;
}